import datetime

#1文件操作
#电影 mp4   音乐mp3   图片jpg   文本txt    表格xlsx
#这些数据都是保存在硬盘里
#电脑 由4大核心部分组成：CPU 存储器 输入设备 输出设备
#存储器包括 内存和外存 创建的变量存储在内存  而文件存储在硬盘上，硬盘是外存的主要代表
#硬盘上所有的数据都是以文件的形式组织的，所以 文件是存储在硬盘上的


#2打开文件
#f = open('文件路径','r')#第1个参数部分写的是文件的路径，比如 d:/Python环境/test.txt
                  #第2个参数部分写的是 以什么方式打开？有3种
                  #只读模式 read  简称 'r'
                  #只写模式 write 简称 'w'
                  #只写模式，但是是写在原有文件内容的末尾 用到append ，简称 'a'


#注意注意!!!!按照下面这一行写,是错误的！
# f = open('D:\1头歌作业图片\code.txt','r')
#注意上面这种写法 因为(1)一个反斜杠是已被理解成为是转义字符，所以路径最好都写成两个反斜杠
#其次(2)注意，打开文件了就必须得在末尾关闭文件，因为打开文件相当于是申请一定的系统资
# 源，当你不用的时候，因为关闭释放它


#所以正确写法是：
# f = open('D:\\1头歌作业图片\\code.txt','r')
# print(f)
# print(type(f))
#
# f.close()



#3写文件
f = open('D:\\1头歌作业图片\\code.txt','w')
# f.write = ('hello')
f.write('hello')#注意这里!!!不能像上面那样写，没有等号!!!
f.close()

#如果你是以只读的方式打开文件的话，那就不能写，会报错
#4但是还需要注意的一点是，如果你是用写的方式(即w方式)打开，就会清空掉文件原有的内容！！！
                   #如果是以a的方式打开，则不会清空内容，写的内容会追加在原有的文件内容的末尾


f=open('D:\\1头歌作业图片\\code.txt','w')
f.write('1111\n')
f.close()

f=open('D:\\1头歌作业图片\\code.txt','a')
# f.append('45678') 注意虽然是a的方式打开，但是这里依然是write
f.write('23456')
f.close()



#5只读文件

#首先先去修改文本文档里的内容为一首诗
f = open('D:\\1头歌作业图片\\code.txt','w')#这里写w的目的就是不保留原有内容
f.write('床前明月光\n')
f.write('疑是地上霜\n')
f.write('举头望明月\n')
f.write('低头思故乡\n')

f.close()

f=open('D:\\1头歌作业图片\\code.txt','r',encoding='GBK')#这里注意，编码格式有2种，分别是
                      #gbk和utf8这两种编码格式，如果读取文件时出错，可能是格式的问题，就需要在
                      #后面写上 encoding=gbk  或者utf8
result = f.read(2)#注意注意！！这里的2代表的是2个字符，而不是2个字节，所以说如果是汉字，2个字符就是2个汉字
print(result)
f.close()



f=open('D:\\1头歌作业图片\\code.txt','r',encoding='gbk')
for line in f:
    print(f'line:{line}')
f.close()


#6非常重要！！！上面的打印出来后你会发现打印的每一句之间都空了一行
#所以你可以这样写print的第2个参数
#  end='' 这个代表的是每次在打印之后需要在末尾加个啥，默认加换行符\n
#那么如果像上面这样写，那就说明啥都不加
f=open('D:\\1头歌作业图片\\code.txt','r',encoding='gbk')
for line in f:
    print(f'line:{line}',end='')#那如果想每一行打印完之后加个分号; 那就写成 end=';'
f.close()




#7还有一个 readlines方法 是将所有内容都读出来，按照行组织到一个列表中
f=open('D:\\1头歌作业图片\\code.txt','r',encoding='gbk')
lines = f.readlines()
print(lines)
f.close()


#8日期计算器
#首先是得在最开头最上面的位置处，导入datetime模块，也就是 import datetime

#下面开始构造datetime变量

date1=datetime.datetime(2012,2,14)#这里介绍一下：date1是变量名
#然后 第1个datetime是模块名，第2个datetime是类型名
# date2=datetime.datetime(2016,2,3,12,22,43,23)这里注意啊!!!!括号里是年月日时分秒，如果你还想
                                         #往后继续写，还有毫秒......

date2=datetime.datetime(2016,2,3)
print(date2-date1)



#9
#如果上面的date1和date2你觉得写的比较麻烦，那最开头位置你就可以写from datetime import datetime
#这句话代表的意思是 从datetime这个模块中，来import(导入)一下datetime这个类型。注意与上面不一样，上面是
#导入datetime这个模块
#那么 date1=datetime(2012,2,14)   date2=datetime(2016,2,3) 就可以这样写了

#10还有一种写法，同样也是导入模块，只不过
# import datetime as dt
#那么下面 date1=dt.datetime(2012,2,14)   date2=dt.datetime(2016,2,3)



#11 单词逆序
#题目：将I am a student.  这句话翻转过来变成 student. a am I
#在python中思路：
#(1)针对上面的字符串，使用空格进行切分，字符串split方法，可以指定分隔符，把字符串分成多个部分，
#并且将他们放到一个list里面
#(2)再针对刚才的切分结果列表，进行逆序
#(3)再把逆序后的列表组合起来，join

def reverseWords(s:str):#注意我们在写python时，最好在变量后面加上它的类型，方便后续pycharm对自己的提示
    tokens = s.split(' ')#这句话的意思是按照空格来进行分割。注意：用split切分之后得到(返回)的是一个列表
                 #并且在这个列表中，每一部分是被切割好的字符串。这里是将列表赋给tokens了
    tokens.reverse()
    #上面已经将分割好的列表中的内容全部都进行了逆转，下面开始将他们拼接成字符串，通过使用join
    return ' '.join(tokens)#这句话的意思是现在借用空格来拼接他们成一个字符串


print(reverseWords('I am a student.'))

























